package com.dp1.pucp.Seguridad.Controlador;

import CharliesCookies.MainController;
import CharliesCookies.MainMenuGUI;
import com.dp1.pucp.Modelo.Clases.Usuario;
import com.dp1.pucp.Seguridad.DAO.LogDAO;
import com.dp1.pucp.Seguridad.DAO.LoginDAO;
import com.dp1.pucp.Seguridad.DAO.UsuarioDAO;
import com.dp1.pucp.Seguridad.Vista.LoginGUI;
import com.dp1.pucp.Seguridad.Vista.RestablecerPassGUI;
import com.dp1.pucp.Util.Validaciones;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

public class LoginControlador {

    private Usuario usuario;
    private LoginGUI view;
    private LoginDAO dao;

    public LoginControlador(LoginDAO dao, LoginGUI view) {
        this.dao = dao;
        this.view = view;
        this.view.addEntrarListener(new entrarListener());
        this.view.addRecPassListener(new recuperarPassListener());
        this.view.addRecuperarListener(new cambiarPassListener());

    }

    class entrarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            view.setCursor(new Cursor(Cursor.WAIT_CURSOR));
            Boolean ingresoUsuario = view.getUsuario().equalsIgnoreCase("");
            Boolean ingresoPass = view.getPass().equalsIgnoreCase("");

            if (ingresoUsuario) {
                Validaciones.mostrarMensajeErrorVal("Ingresar Usuario");
            } else {
                if (ingresoPass) {
                    Validaciones.mostrarMensajeErrorVal("Ingresar su Contraseña");
                } else {
                    String password = view.getPass();
                    String pas123456 = UsuarioDAO.getStringMessageDigest("123456");
                    String hasPass = UsuarioDAO.getStringMessageDigest(password);

                    if (password.startsWith("11111")) {
                        RestablecerPassGUI recoverGUI = new RestablecerPassGUI();
                        RestablecerPassControlador controller = new RestablecerPassControlador(recoverGUI, view.getUsuario());
                        view.dispose();
                    } else {

                        usuario = dao.validarUsuario(view.getUsuario());

                        if (usuario.getIdusuario() == 0) {
                            Validaciones.mostrarMensajeErrorVal("Usuario No Existe");
                        } else {
                            if (usuario.getContrasena().equals(UsuarioDAO.getStringMessageDigest(view.getPass()))) {
                                if (pas123456.compareToIgnoreCase(hasPass) == 0) {
                                    RestablecerPassGUI recoverGUI = new RestablecerPassGUI();
                                    RestablecerPassControlador controller = new RestablecerPassControlador(recoverGUI, view.getUsuario());
                                    view.dispose();
                                } else {
                                    //Codigo para llamar a nueva pantalla
                                    //view.mostrarAviso("Usuario Habilitado ;)");
                                    usuario.setUltimaFechaIngreso(new Date());
                                    dao.guardarUsuario(usuario);
                                    MainMenuGUI CharliesCookies = new MainMenuGUI();
                                    MainController controller = new MainController(CharliesCookies, usuario);
                                    view.dispose();
                                    LogDAO.insertarLog(usuario, "Ingresar al Sistema");
                                }
                            } else {
                                view.mostrarAviso("Contraseña Incorrecta");
                                view.LimpiarPass();
                            }
                        }
                    }
                }
            }
        }
    }

    class cambiarPassListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            Boolean ingresoUsuario = view.getUsuario().equalsIgnoreCase("");

            if (ingresoUsuario) {
                Validaciones.mostrarMensajeErrorVal("Ingresar Usuario");
            } else {
                RestablecerPassGUI recoverGUI = new RestablecerPassGUI();
                RestablecerPassControlador controller = new RestablecerPassControlador(recoverGUI, view.getUsuario());
                view.dispose();
            }

        }
    }

    class recuperarPassListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            Boolean ingresoUsuario = view.getUsuario().equalsIgnoreCase("");

            if (ingresoUsuario) {
                Validaciones.mostrarMensajeErrorVal("Ingresar Usuario");
            } else {
                UsuarioDAO userDAO = new UsuarioDAO();
                usuario = dao.validarUsuario(view.getUsuario());
                EmailSender recuperaPass = new EmailSender();
                String to[] = {usuario.getEmpleado().getCorreo()};

                String mensaje = new String();
                String nuevoPass = new String();

                String fecha = new Date().toString();
                nuevoPass = "11111" + UsuarioDAO.getStringMessageDigest(fecha);

                mensaje = "Se le proporcionará una clave provisional para que pueda ingresar y cambiar su contraseña:\n"
                        + "Su contraseña es: " + nuevoPass;

                recuperaPass.sendMail("willito.wonka.jr@gmail.com", "$$xaxi$$", mensaje, to);
                usuario.setContrasena(nuevoPass);
                usuario.setContrasenaAnterior(usuario.getContrasena());
                userDAO.guardarUsuario(usuario);
                Validaciones.mostrarMensajeAvisoVal("Su contraseña se envió satisfactoriamente");
            }
        }
    }
}
